##
# Makefile for our C Kernel
#

AS=gcc
CC=gcc
LD=ld
CFLAGS=-fno-builtin -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs


all: boot.o gdt.o kernel.o isr.o idt.o io.o exceptions.o pic.o keyboard.o
	$(LD) -Tsetup.ld boot.o gdt.o kernel.o isr.o idt.o io.o exceptions.o pic.o keyboard.o -o kernel.elf

kernel.o: kernel.c multiboot.h
	$(CC) $(CFLAGS) -c $<

boot.o: boot.S multiboot.h
	$(AS) $(CFLAGS) -DASM -c $<

gdt.o: gdt.c gdt.h
	$(CC) $(CFLAGS) -c $<

isr.o: isr.S x86.h
	$(AS) $(CFLAGS) -DASM -c $<

idt.o: idt.c idt.h exceptions.h io.h unistd.h x86.h
	$(CC) $(CFLAGS) -c $<

io.o: io.c io.h unistd.h
	$(CC) $(CFLAGS) -c $<

exceptions.o: exceptions.c exceptions.h
	$(CC) $(CFLAGS) -c $<

pic.o: pic.c pic.h
	$(CC) $(CFLAGS) -c $<
	
keyboard.o: keyboard.c
	$(CC) $(CFLAGS) -c $<

clean:
	@rm *.o kernel.elf

test:
	@qemu -M pc -fda disk.img -boot a

install:
	mount -o loop disk.img /mnt
	cp kernel.elf /mnt/boot
	umount /mnt

